/****************************************************************************************** Class */
export default class Time {

    /**
     * 获取10位时间戳
     * 
     * @param {String} 需要转换的时间，不传时使用当前时间
     */
    static get10(datetime) {
        const date = datetime ? new Date(datetime) : new Date();
        return Date.parse(date) / 1000;
    }

    /**
     * 获取13位时间戳
     * 
     * @param {String} 需要转换的时间，不传时使用当前时间
     */
    static get13(datetime) {
        const date = datetime ? new Date(datetime) : new Date();
        return date.getTime();
    }

    /**
     * 取间隔的秒数或毫秒数 
     * 
     * @param {Int} startTimestamp 开始时间戳
     * @param {Int} endTimestamp 结束时间戳
     */
    static interval(startTimestamp, endTimestamp) {
        return endTimestamp - startTimestamp;
    }

    /**
     * 倒计时
     * 
     * @param {Int} timestamp 时间戳（必须是10位时间戳）
     */
    static countdown(timestamp) {

        // 取时间秒数差
        let interval = timestamp - this.get10();

        // 计算时间差中的日时分秒（时分秒补0）
        let day = Math.floor(interval / (60 * 60 * 24)).toString();
        let hour = this._zero(Math.floor(interval / (60 * 60)) - (day * 24)).toString();
        let minute = this._zero(Math.floor(interval / 60) - (day * 24 * 60) - (hour * 60)).toString();
        let second = this._zero(Math.floor(interval) - (day * 24 * 60 * 60) - (hour * 60 * 60) - (minute * 60)).toString();

        // 返回一个对象
        return { day, hour, minute, second };
    }

    /**
     * 将当前时间或指定时间戳转换为指定时间格式的字符串
     * 
     * @param {String} formats 需要转换为的时间格式，默认为：Y-m-d
     * @param {Int} timestamp 时间戳，默认为当前时间
     */
    static format(formats, timestamp) {

        // 参数默认值 
        formats = formats || 'Y-m-d';
        let date = timestamp ? new Date(timestamp) : new Date();

        // 取年月日 
        let year = date.getFullYear();
        let month = this._zero(date.getMonth() + 1);
        let day = this._zero(date.getDay());
        let hour = this._zero(date.getHours());
        let minute = this._zero(date.getMinutes());
        let second = this._zero(date.getSeconds());

        // 替换返回
        return formats.replace(/Y|m|d|H|i|s/ig, function (matches) {
            return ({
                Y: year,
                m: month,
                d: day,
                H: hour,
                i: minute,
                s: second
            })[matches];
        });
    }

    /**
     * 补时间位上的先导0
     * 
     * @param {Int} value 值
     */
    static _zero(value) {
        if (value < 10) {
            return '0' + value;
        }
        return value;
    }
}
